#ifndef GAMESTATE_CLASS_H_
#define GAMESTATE_CLASS_H_

#include "Base/State.h"
#include "Base/EventObserver.h"
#include "Base/Entity.h"
#include "Base/EntityManager.h"
#include "RenderSystem.h"
#include "PhysicSystem.h"
#include "PlayerSystem.h"
#include "BulletSystem.h"
#include "DamageSystem.h"
#include "CameraSystem.h"
#include "ParticuleSystem.h"
#include "ScriptSystem.h"

class GameState : public BPL::State
{
public:

	GameState();
	virtual ~GameState();

	virtual void enter();
    virtual void exit();
    virtual bool pause();
    virtual void resume();
    virtual void update(double time);

	BulletSystem* mpt_bulletSystem;
	DamageSystem* mpt_damageSystem;
    RenderSystem* mpt_renderSystem;
    PhysicSystem* mpt_physicSystem;
    PlayerSystem* mpt_playerSystem;
    CameraSystem* mpt_cameraSystem;
	ScriptSystem* mpt_scriptSystem;
	ParticuleSystem* mpt_particuleSystem;

protected:
	BPL::EntityManager* mpt_entityManager;

private:
	// FONCTION TEMPORAIRE, LE TEMPS DE FAIRE LE MAPLOADER
	void _addBlockIn(const sf::Vector2i& position);
	void _addSlopeBlockIn(const sf::Vector2i& position, bool left);
	void _addPlayerIn(const sf::Vector2i& position);
	void _addEnemyIn(const sf::Vector2i& position);
};

#endif

